import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import cesium from 'vite-plugin-cesium'
import dts from 'vite-plugin-dts'
import path from 'path'

/**
 * Vite 的库模式是一种特殊的构建模式，旨在帮助开发者高效地将代码打包成可以复用的库或组件。
 * 通过库模式，Vite 可以轻松生成支持多种模块格式（如 ESM、UMD、CJS）的产物，适配各种场景。
 */
export default defineConfig({
  plugins: [
    vue(),
    cesium(),
    dts({
      tsconfigPath: './tsconfig.json',
      outDir: './dist',
      entryRoot: './src',
      exclude: ['node_modules', 'vite.config.ts'],
    }),
  ],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  },
  build: {
    lib: {
      // 入口文件，指向你的组件库的主文件
      entry: './src/index.ts',
      // 库的名称
      name: 'GeoLibs',
      // 导出的模块格式
      formats: ['es', 'umd', 'cjs'],
      // 打包后文件名
      fileName: (format) => `GeoLibs.${format}.js`,
    },
    rollupOptions: {
      // 确保外部化处理不需要打包的依赖
      external: ['vue'], // 排除 Vue
      output: {
        // 在 UMD 模式下为外部化的依赖提供全局变量
        globals: {
          vue: 'Vue',
        },
      },
    },
  },
})
